#!/usr/bin/env python
# -*- coding: utf-8 -*-
# version: 02/02/2012 beta 0.1
# Copyright Pedro Santos nº12065
#           Rui Pereira nº12061

import time
import sys
import random
import os

'''
limpa o terminal/consola

sys.system("clear")

begin_time = time.clock()


'''

def preencher_tabela():
    '''
    Cria a Tabela T com 1000 elementos variando a posição j (x)
    Cria e inicia na primeira posição (0) o valor de j
    Cria uma tabela de contagem tab_contagem com 10 elementos que são as possibilidades de digitos [0,9]
    '''
    T = [0 for x in range(0,1000)]
    j = 0
    tab_contagem = [0 for x in range(0,10)]

    '''
    ciclo while para percorrer a tabela T de indice j
    atribui um numero aleatorio entre 0..9 à variavel x
    Vai validar a quantidade de repetições de cada digito através de tab_contagem, cada um não pode exceder 100 repetições
    '''

    while j < 1000:
        x = random.randint(0,9)
        '''
        atribuição de valor aleatorio a x 0..9
        '''
        if tab_contagem[x] > 99:
                        continue 
                        '''
                        comprova na posição de 0..9 da tab_contagem se o digito em questão já atingio 100 repetições
                        '''
            
                        '''
                        Se atingiu o limite, salta do ciclo sem adicionar o valor randomizado à tabela T[]
                        '''
        tab_contagem[x] += 1 
        '''
        se não atinge a as 100 repetições, adiciona mais uma repetição na correspondente tabela de contagem
        '''
        T[j] = x 
        '''
        Adiciona o digito randomizado à correspondente posição j na tabela T[]
        '''
        j += 1 
        '''
        Avança a posição j na tabela T[]
        '''
        pass
        '''
        Retorna a Tabela T
        '''
    return T

'''
Percorre o preenchimento da Tabela para a não repetição de digitos
'''   

def contagem(T):
    tab_contagem = [0 for x in range(0,10)]
    for x in T:
        tab_contagem[x] += 1
        pass
    for x in tab_contagem:
        print x
        pass
    pass

T = preencher_tabela()   

'''
Função que troca posicao T[l] com o valor na posicao T[0]
''' 
def switchTab(l):
        aux = T[l]
        T[l] = T[0]
        T[0] = aux
        pass


#p = random.randint(0,999)

#*****************************************************************
'''
Ciclo que atribui a Z1,Z2,Z3 e Z4 os valores calculados com base nos parametros existentes no enunciado
'''

def Acha_z(p):
    Z = [0 for x in range(0,5)]
    j=0
    while j <= 3:
        if (p<1000-j):
            l=p+j
            pass
        else:
            l=0
            pass
        Z[j+1]=T[l]
        j+=1
        switchTab(l)
        pass
    return Z


'''
Cilco para executar as pepetições em numero de k
'''


def repete_k(k):
    print k
    p = random.randint(0,999)
    N=[0 for k in range(0,k)]
    while k>0:
        Z = Acha_z(p)
        N[k]=Z[1]<<12|Z[2]<<8|Z[3]<<4|Z[4]
        p=Z[1]*100+Z[2]*10+Z[3]*1
        k-=1
        pass
    print N
    pass

if len(sys.argv) < 2: 
    print "Tem de inserir um argumento" 
    sys.exit(1) 
    else:
		k = sys.argv[1]


